#! python3
# datetime模块


import datetime
import time


def sleepToDate(dt):
    """
    暂停直至特定日期
    :return:
    """
    while datetime.datetime.now() < dt:
        time.sleep(1)


def datetimeToStr(dt):
    """
    将 datetime 对象转换为字符串
    :return:
    %Y 带世纪的年份，例如'2014'      %y 不带世纪的年份，'00'至'99'（1970 至 2069）
    %m 数字表示的月份, '01'至'12'
    %B 完整的月份，例如'November'    %b 简写的月份，例如'Nov'
    %d 一月中的第几天，'01'至'31'
    %j 一年中的第几天，'001'至'366'
    %w 一周中的第几天，'0'（周日）至'6'（周六）
    %A 完整的周几，例如'Monday'           %a 简写的周几，例如'Mon'
    %H 小时（24 小时时钟），'00'至'23'    %I 小时（12 小时时钟），'01'至'12'
    %M 分，'00'至'59'
    %S 秒，'00'至'59'
    %p 'AM'或'PM'
    %Z 当前时区的名称
    %% 就是'%'字符
    """
    return dt.strftime('%Y-%m-%d %H:%M-%S')


def strToDatetime(str, fmt):
    """
    将字符串转换成 datetime 对象
    :return:
    """
    try:
        res = datetime.datetime.strptime(str, fmt)
    except ValueError:
        res = "格式不匹配"
    return res


if __name__ == '__main__':
    dtNow = datetime.datetime.now()
    print('当前时间：', dtNow)

    dtSet = datetime.datetime(2015, 10, 21, 16, 29, 10)
    print('设置的时间：', dtSet.year, dtSet.month, dtSet.hour, dtSet.second)

    # Unix 纪元时间戳转换为 datetime 对象
    print('time转datetime:', datetime.datetime.fromtimestamp(10000000))
    print('time转datetime:', datetime.datetime.fromtimestamp(time.time()))

    # 比较大小
    print('比较大小：', dtSet > dtNow)

    """
    timedelta 数据类型，它表示一段时间.
    接受关键字参数 weeks、days、hours、minutes、seconds、milliseconds(毫秒) 和 microseconds(微秒)
    没有提供的参数默认为 0
    """
    print("timedelta 数据类型:")
    delta = datetime.timedelta(days=11, hours=10, minutes=9, seconds=8)
    # timedelta 对象拥有的总时间以天、秒、微秒来表示
    print(delta.days, delta.seconds, delta.microseconds)
    print(delta.total_seconds())  # 返回以秒表示的时间
    print(str(delta))  # 返回格式良好的、可读的字符串

    # 30秒之后的时间
    delta30s = datetime.timedelta(seconds=30)
    print("30秒之后的时间:", dtNow + delta30s)

    # print(datetime.datetime.now())
    # sleepToDate(dtNow + delta30s)  # sleep 直到datetime为30秒之后的时刻
    # print(datetime.datetime.now())

    a = datetimeToStr(dtNow)  # 将 datetime 对象转换为字符串
    print(type(a), a)

    b = strToDatetime('2015/10/21 16:29:00', '%Y/%m/%d %H:%M:%S')
    print(type(b), b)
